Add maybe_uninit constructor and .assume_init() method #803
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add new constructor -
Array::maybe_uninit()
that makes an uninitialized array. This is represented in the type system as the array having the element typeMaybeUninit<T>
, and can be converted to a proper array ofT
when it has been fully initialized.Fixes #685
Zip's apply_assign_into can write to
MaybeUninit
elements, but more than that, it is pretty manual work, but it can at least be done in safe code. The onlyunsafe
step is to promise all elements are initialized, and calling.assume_init()
.The updated example -
sort-axis.rs
shows how usage remains similar to the old constructor, but it is much easier to be confident about having done it correctly - and it supports non-Copy elements.